package main

import "fmt"

func main() {
	//声明数组
	numbers := []int{5, 2, 4, 3, 1, 6, 7, 8, 9, 10}
	length := len(numbers)
	lastSwap := length
	count := 0
	//构建遍历循环
	for i := 0; i < length-1; i++ {
		fmt.Printf("**第 %d 次**\n\n", count+1)
		count++
		for j := 0; j < length-i-1; j++ {
			//fmt.Println(i,j)
			//对比两个相邻元素
			if numbers[j] > numbers[j+1] {
				//如果如果第一个比第二个大，就交换它们的位置。 【顺序】
				//倒序反之：如果第一个比第二个小，就交换它们的位置。
				numbers[j+1], numbers[j] = numbers[j], numbers[j+1]
				//记录最后交换的位置。因为从零开始，所以加1
				lastSwap = j + 1
			}
			fmt.Printf("%d. %v\n", j+1, numbers)
		}
		fmt.Println("")
		//如果长度和最后位置不匹配，意味着还有数据进行交换。
		if length != lastSwap {
			length = lastSwap //交换位置。
			i = -1            //重置外层循环，因为接下来会有`i++`，所以设置为 `-1`
		}
	}
}
